#include<bits/stdc++.h>
using namespace std;
struct car
{
    int d;
    int v;
    int a;
    int p1;
    int p2;
};
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int T;
    cin>>T;
    while(T>0)
    {
        int ans=0;
        int cnt=0;
        car c[100101]={0};
        int p[100101][2]={0};
        int n,m,L,V;
        cin>>n>>m>>L>>V;
        for(int i=1;i<=n;i++)
        {
            cin>>c[i].d>>c[i].v>>c[i].a;
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i][0];
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(c[i].d<=p[j][0])
                {
                    if(c[i].v*c[i].v+2*c[i].a*(p[j][0]-c[i].d)>V*V)
                    {

                        cnt++;
                        ans++;
                        c[ans].p1=j;
                        break;
                    }
                }

            }
            for(int j=1;j<=m;j++)
            {
                if(c[i].d<=p[j][0])
                {
                    if(c[i].v*c[i].v+2*c[i].a*(p[j][0]-c[i].d)>V*V)
                    {
                        p[j][1]++;
                        c[i].p2=j;
                    }
                }

            }
        }
/*
        int t=ans;
        while(t>0)
        {
            int maxn=0,x;
            for(int i=1;i<=m;i++)
            {
                if(maxn<p[i][1])
                {
                    maxn=p[i][1];
                    x=i;
                }

            }
            cnt++;
            for(int i=1;i<=t;i++)
            {
                if(c[i].p1<=x&&c[i].p2>=x)
                {
                    for(int j=c[i].p1;j<=c[i].p2;j++)
                    {
                        p[j][1]--;
                    }
                    c[i].p1=c[t].p1;
                    c[i].p2=c[t].p2;
                    t--;
                }
            }

        }
*/
        cout<<ans<<" "<<cnt<<endl;
        T--;
    }
    return 0;
}
